export function base64ToUint8Array(base64: string) {
  // 解码Base64字符串
  const byteCharacters = atob(base64.trim());
  // 将解码后的二进制字符串转换为Uint8Array
  const byteNumbers = new Uint8Array(byteCharacters.length);
  for (let i = 0; i < byteCharacters.length; i++) {
    byteNumbers[i] = byteCharacters.charCodeAt(i);
  }
  return byteNumbers;
};

export const fileToBlob = (file: File) => {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = function (e: any) {
      const blob = new Blob([e.target.result], { type: file.type });
      const blobUrl = URL.createObjectURL(blob);//创建blob url
      resolve(blobUrl)
    };
    reader.onerror = (error) => {
      reject(error);
    };
    reader.readAsArrayBuffer(file); // 读取为 ArrayBuffer
  })
}

export const blobToBuffer = (blob: Blob) => {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = () => {
      resolve(reader.result); // reader.result 是 ArrayBuffer
    };
    reader.onerror = (error) => {
      reject(error);
    };
    reader.readAsArrayBuffer(blob);
  });
}

export const bufferToAudioUrl = (buffer: any) => {
  /*
    MIME 类型:
    1、 mp3：audio/mpeg 或 audio/mp3（所有主流浏览器均支持）
    2、 wav：/wav、audio/wave 或 audio/x-wav（所有主流浏览器均支持）
    3、 mp4：audio/mp4 或 audio/x-m4a（所有主流浏览器均支持）
    4、 ogg：audio/ogg（Chrome、Firefox、Edge 支持，但 Safari 不支持）
    5、 webm：audio/webm（Chrome、Firefox、Edge 支持，但 Safari 支持有限）
  */
  const blob = new Blob([buffer], { type: "audio/mpeg" });
  return URL.createObjectURL(blob); //创建blob url
}

export const blobToBase64 = (blob: Blob) => {
  return new Promise((resolve, reject) => {
    const reader = new FileReader()
    reader.onload = () => {
      resolve(reader.result)
    }
    reader.onerror = (error) => {
      reject(error)
    }
    reader.readAsDataURL(blob) // 将 Blob 转换为 Base64 字符串
  })
}